hello world и программирование QSPI Flash для работы

Введение

Создание аппаратного проекта в Vivado

Создание нового проекта Vivado

VeryCapture_20250604115611

VeryCapture_20250604115813

VeryCapture_20250618094011

VeryCapture_20250604121357

VeryCapture_20250604122008

VeryCapture_20250618095743

VeryCapture_20250618095822

Создание системы обработки в Block Design

VeryCapture_20250618100007

VeryCapture_20250604135328

VeryCapture_20250604135703

VeryCapture_20250604135821

VeryCapture_20250604135937

Zynq Block Design: Показывает различные настраиваемые блоки системы обработки Zynq (PS), где серые части не изменяемы, а выделенные зеленым части настраиваемы. Существует два способа входа на страницу конфигурации: напрямую щелкнуть на различные настраиваемые блоки (выделенные зеленым части), чтобы войти на их страницу конфигурации для настройки, или выбрать навигацию по страницам слева, чтобы войти на соответствующую страницу для настройки. PS-PL Configuration: Настройка интерфейса PS-PL, включая интерфейсы шин AXI GP, HP и другие. Peripheral I/O Pins: Выбор MIO/EMIO для различных периферийных устройств ввода-вывода. MIO Configuration: Конкретная настройка MIO/EMIO для различных периферийных устройств ввода-вывода. Clock Configuration: Используется для настройки входной тактовой частоты PS, тактовой частоты периферийных устройств, а также тактовых частот DDR и CPU и т.д. DDR Configuration: Используется для установки информации конфигурации контроллера DDR. SMC Timing Calculation: Используется для выполнения расчетов временных характеристик SMC. Interrupts: Используется для настройки портов прерываний PS-PL.

image-20250621125144559

VeryCapture_20250604143436

 

MIO14 и MIO15 в BANK500 используются как выводы для последовательной связи UART и в конечном итоге подключены к чипу USB-to-serial CH340X на базовой плате. Поэтому для реализации функциональности последовательной связи нам необходимо настроить MIO14 и MIO15 как интерфейсные выводы для модуля UART0 в PS.

VeryCapture_20250604150543

VeryCapture_20250604150502

Нажмите на страницу MIO Configuration слева, разверните I/O Peripherals > UART0 справа, и вы увидите конкретную информацию о конфигурации выводов: MIO14 как вывод RX, MIO15 как вывод TX.

VeryCapture_20250604151515

VeryCapture_20250604151755

VeryCapture_20250604152226

image-20250621130649186

VeryCapture_20250604153711

VeryCapture_20250604153852

VeryCapture_20250604154146

VeryCapture_20250604154323

VeryCapture_20250604154550

В этом интерфейсе мы можем выбрать автоматическое подключение интерфейсов IP-модуля. В этом проекте только один IP-модуль. Подтвердите, установив флажок processing_system7_0 слева, затем нажмите "OK". На этом этапе модуль ZYNQ7 PS имеет две группы внешних интерфейсов, а именно DDR и FIXED_IO. Эти интерфейсы будут назначены на конкретные выводы устройства ZYNQ. Нажав "+" на интерфейсе модуля ZYNQ7 PS, чтобы развернуть эти две группы интерфейсов, вы можете наблюдать, какие сигналы содержит каждая из них.

VeryCapture_20250604154645

VeryCapture_20250604154855

Генерация HDL файла верхнего уровня

VeryCapture_20250604155500

VeryCapture_20250604160224

VeryCapture_20250604160348

VeryCapture_20250604160822

VeryCapture_20250604160857

VeryCapture_20250604161255

Генерация файла Bitstream и экспорт файла xsa

Если в проекте используются ресурсы PL, необходимо добавить ограничения на выводы, а проект необходимо синтезировать, реализовать и сгенерировать файл Bitstream. Поскольку этот проект является минимальной системой и не использует часть PL, эти шаги не обязательны, и аппаратное обеспечение можно напрямую экспортировать в xsa.

VeryCapture_20250604162230

Во всплывшем интерфейсе нажмите next напрямую:

VeryCapture_20250604162321

Поскольку мы не сгенерировали файл bitstream, напрямую выберите первый вариант в следующем интерфейсе. Если файл bitstream был сгенерирован, нажмите второй вариант "Include bitstream", нажмите next:

VeryCapture_20250604162618

Далее будет сгенерирован файл .xsa. Этот файл упаковывает все аппаратные компоненты и информацию об аппаратной платформе. Файл .xsa будет использоваться позже с программным обеспечением Vitis или Linux.

VeryCapture_20250618102749

Наконец, нажмите finish для завершения:

VeryCapture_20250618102827

VeryCapture_20250604164546

Создание программного проекта в Vitis

platform project и application project

В vitis можно создавать два типа проектов: platform project и application project.

Пункт сравненияPlatform ProjectApplication Project
ЦельОпределение аппаратной инфраструктурыРазработка ПО, работающего на аппаратном обеспечении
Входная зависимостьЭкспортированный из Vivado файл .xsaСуществующая платформа (.xpfm или напрямую .xsa)
Частота измененийНизкая (редко меняется после стабилизации аппаратного обеспечения)Высокая (итеративная разработка кода)
Выходной файл.xpfm (файл описания платформы).elf (исполняемый файл)
Типичный пользовательИнженер по аппаратному обеспечению/Системный архитекторИнженер-программист/Встраиваемый разработчик

При создании проекта vitis вы можете сначала создать проект платформы, а затем создать проект приложения на основе этого проекта платформы. Вы также можете напрямую создать проект приложения, но это автоматически создаст связанный с этим проектом приложения проект платформы.

Здесь, в качестве примера, рассмотрим процесс создания сначала проекта платформы, а затем проекта приложения.

Создание проекта платформы

Впоследствии наши проекты приложений будут основаны на созданном проекте платформы.

image-20250621141749253

VeryCapture_20250618104211

Нажмите "Browse", выберите файл xsa, сгенерированный vivado.

VeryCapture_20250605134327

После выбора в опциях ниже автоматически появится используемая операционная система. Также установите флажок "Generate boot components", который автоматически добавит файлы, связанные с fsbl, в аппаратную платформу. Нажмите "Finish":

image-20250623102451632

На этом этапе создание проекта платформы завершено. Последующие создаваемые нами проекты приложений будут основаны на этом проекте платформы. Как показано:

image-20250623102742671

Если позже файл ресурсов аппаратного обеспечения (.xsa) будет изменен (путем повторной компиляции в vivado для генерации нового файла xsa), просто обновите файл ресурсов аппаратного обеспечения. Конкретная операция: щелкните правой кнопкой мыши на проекте платформы, выберите "update Hardware specification" из всплывших вариантов. Во всплывшем окне выберите вновь сгенерированный файл xsa. Затем щелкните правой кнопкой мыши на этом проекте платформы и выберите Build project, чтобы перестроить проект платформы.

image-20250621144532679

Далее нам нужно создать проект приложения на основе этого проекта платформы.

Создание проекта приложения

Создайте через File->New->Application Project:

image-20250621143033176

Во всплывшем интерфейсе нажмите next:

VeryCapture_20250604171626

Выберите ранее созданный проект платформы:

Обратите внимание здесь. Если проект платформы ранее не был создан, вы можете выбрать вкладку Create a new platform from hardware. Это создаст проект приложения, а также создаст проект платформы.

image-20250623103225954

Заполните имя проекта, нажмите next:

image-20250623103555160

На следующей странице вы можете выбрать желаемую операционную систему. На этот раз мы используем bare metal, нажмите next:

VeryCapture_20250604172551

Выберите "Hello World" в "Templates": Поскольку создается простой проект "Hello World", в шаблоне уже есть сгенерированный код, который можно использовать без изменений. Нажмите "Finish":

VeryCapture_20250604173209

На этом этапе создан новый проект приложения, как показано:

image-20250623104640363

Нажмите "hello_world_system"->"hello_world"->src, внутри находится программный файл .c:

image-20250623104611615

Компиляция

Щелкните правой кнопкой мыши на "hello_world", нажмите "build project" для компиляции кода. Если ошибок нет, будет сгенерирован elf-файл. Если есть ошибки, в разделе Problems будут видны сообщения об ошибках.

image-20250623104856653

Отладка

Настройте DIP-переключатель режима загрузки платы разработки в режим JTAG. Используйте кабель USB типа-C для подключения порта JTAG на плате разработки к компьютеру. Питание платы разработки уже включено. Приготовьте другой кабель USB типа-C для подключения порта PS_UART на плате разработки к компьютеру. Одновременно откройте инструмент последовательного порта (например, MobaXterm) на компьютере, выберите соответствующий распознанный USB-последовательный порт и установите его скорость передачи 115200.

image-20250808124540635

Нажмите "Xilinx"->"XSCT Console", в правом нижнем углу появится консоль XSCT. Введите команду "connect". Эта команда устанавливает соединение для отладки с целевым аппаратным обеспечением (например, нашей платой разработки Zynq-7020). Затем введите команду "targets". Эта команда перечисляет все доступные цели отладки (процессоры/аппаратные компоненты) в текущей системе. Если появится ответ, показанный на рисунке, это означает, что соединение успешно установлено.

VeryCapture_20250605110600

Вы можете щелкнуть правой кнопкой мыши и выбрать Debug as:

image-20250623104955459

Или действуйте через ярлык Debug: Нажмите на выпадающий список, чтобы вызвать выпадающие options, и выберите проект приложения, который требует отладки:

image-20250623105305485

На этом этапе он перейдет в режим отладки. По умолчанию он переходит непосредственно к main(). После этого вы можете выполнять пошаговую отладку, отладку с точками останова:

image-20250623105736534

Если необходимо перезагрузить программу, вы можете щелкнуть правой кнопкой мыши на Debug->[System Project Debug], выбрать terminate and relaunch:

image-20250623105935540

После Run информация "Hello World" и другие символьные信息 будут выведены в инструменте последовательного порта компьютера.

Генерация BOOT.bin

Есть два способа генерации BOOT.bin:

Прямая генерация через "Build Project"

Щелкните правой кнопкой мыши на "hello_world_system" и выполните build project. Это автоматически сначала скомпилирует "hello_world" для генерации elf-файла, затем объединит сгенерированный elf-файл с файлом fsbl.elf и файлом bitstream из проекта платформы, чтобы сгенерировать файл BOOT.bin. В конечном итоге именно этот файл BOOT.bin программируется во flash.

image-20250623110335962

image-20250623110634193

Ручная генерация BOOT.BIN

Щелкните правой кнопкой мыши на "hello_world_system", нажмите "Create Boot Image". Или действуйте через меню Xilinx->Create Boot Image.

image-20250623110853134

Выберите "Create new BIF file", обязательно убедитесь, что тип "Output format" — BIN, как показано ниже:

image-20250623111229773

Добавьте следующее содержимое по порядку:

Наконец, нажмите "Create Image", чтобы завершить создание.

image-20250623111719181

image-20250623111849955

image-20250623112404183

Если появится результат, показанный на рисунке, это указывает на успешное создание.

image-20250623112104336

При последующей ручной генерации файла BOOT.bin вы можете нажать "Import form existing BIF file", выбрать правильный путь к файлу и нажать "Create Image ":

image-20250623112540555

Программирование в QSPI-Flash

Нажмите "Xilinx"->"Program Flash":

VeryCapture_20250605110823

В появившемся интерфейсе обязательно убедитесь, что "Image File" — это сгенерированный файл BOOT.BIN, "Offset" начинается с 0x00000000, а "Init File" — это файл "fsbl.elf".

Объясните роли файлов BOOT.Bin и fsbl.elf:

BOOT.BIN:

fsbl.elf:

image-20250623112728041

Нажмите "Program" и подождите несколько секунд. Если появится "Flash Operation Successful", это указывает на успешное программирование QSPI Flash.

VeryCapture_20250605111329

Выключите плату разработки, установите DIP-переключатель, соответствующий режиму загрузки, в положение QSPI. Подключите последовательный порт PS_UART к компьютеру кабелем Type-C и включите питание. Откройте соответствующий последовательный порт на компьютере с помощью инструмента для последовательного порта. Затем нажмите кнопку сброса на плате разработки, и вы увидите соответствующую информацию на экране инструмента для последовательного порта компьютера.